<?php

require_once("MatProfPer_Collection.php");
require_once("MateriasPensumCollection.php");
require_once("PeriodosCollection.php");

//Utiliza el patron Singleton
class MateriasFachada {

    private static $instance;

    private function __construct() {
        
    }

    public static function getInstance() { //metodo Singleton
        if (!isset(self::$instance)) {
            $c = __CLASS__;
            self::$instance = new $c;
        }
        return self::$instance;
    }

    public function verMateriasCursadas($username) {
        $materiasCursadasCollection = new MatProfPer_Collection($username);
        $materiasCursadasArray = $materiasCursadasCollection->obtenerMateriasArray();
        return($materiasCursadasArray);
    }

    public function obtenerMateriasPensum() {
        $materiasPensum = new MateriasPensumCollection();
        return $materiasPensum;
    }

    public function obtenerPeriodosValidos($user, $materia) {
        $periodosCollection = new PeriodosCollection();
        return $periodosCollection->obtenerPeriodosValidos($user, $materia);
    }

    public function agregarMateriaP($user, $profesor, $materia, $mesIni, $mesFin, $ano, $calificacion = NULL) {
        $cursaP = new CursaP(); //OJO: Cambiar si se usara la fabrica.
        $cursaP->setPerfil_user_estudiante($user);
        $cursaP->setMateria_codigo($materia);
        $cursaP->setPeriodo_mesInicial($mesIni);
        $cursaP->setPeriodo_mesFinal($mesFin);
        $cursaP->setPeriodo_ano($ano);
        $cursaP->setPerfil_user_profesor($profesor);
        $cursaP->setCalificacion($calificacion);
        $result = $cursaP->save();
        return $result;
    }

    public function agregarMateriaS($user, $materia, $mesIni, $mesFin, $ano, $nombreP, $apellidoP, $calificacion = NULL) {
        $cursaS = new CursaS(); //OJO: Cambiar si se usara la fabrica.
        $cursaS->setPerfil_user($user);
        $cursaS->setMateria_codigo($materia);
        $cursaS->setPeriodo_mesInicial($mesIni);
        $cursaS->setPeriodo_mesFinal($mesFin);
        $cursaS->setPeriodo_ano($ano);
        $cursaS->setNombreProfesor($nombreP);
        $cursaS->setApellidoProfesor($apellidoP);
        $cursaS->setCalificacion($calificacion);
        $result = $cursaS->save();
        return $result;
    }

    public function editarMateriaCursada($user, $codigo, $mesInicial, $mesFinal, $anio) {
        $reNumeros = "/^([0-9])*$/";
        $reNombres = "/^[a-zA-Z]+[a-zA-Z ]*[a-zA-Z]+$/";
        $reNota = "/^([0-9])*$/";

        // Validar formulario

        $nombreProfesor = filter_input(INPUT_POST, 'nombreProfesor', FILTER_VALIDATE_REGEXP, array("options" => array("regexp" => $reNombres)));
        $apellidoProfesor = filter_input(INPUT_POST, 'apellidoProfesor', FILTER_VALIDATE_REGEXP, array("options" => array("regexp" => $reNombres)));
        $calificacion = filter_input(INPUT_POST, 'calificacion', FILTER_VALIDATE_REGEXP, array("options" => array("regexp" => $reNota)));
        $msjs = "";


        if (!$nombreProfesor)
            $msjs[] = "El nombre del profesor es invalido. Solo se permiten letras y espacios.";
        if (!$apellidoProfesor)
            $msjs[] = "El nombre del profesor es invalido. Solo se permiten letras y espacios.";
        if (!$calificacion)
            $msjs[] = "La calificacion es invalida. Solo se permite un numero";

        if (!($nombreProfesor && $apellidoProfesor && $calificacion)) {
            return $msjs;
        }

        $materiasCursadasCollection = new MatProfPer_Collection($user);
        $confirmacion = $materiasCursadasCollection->editarMateriaCursada($user, $codigo, $mesInicial, $mesFinal, $anio, $nombreProfesor, $apellidoProfesor, $calificacion);
        return $confirmacion;
    }

    public function eliminarMateria($user, $codigo, $mesInicial, $mesFinal, $anio) {
        $materiasCursadasCollection = new MatProfPer_Collection($user);
        $confirmacion = $materiasCursadasCollection->eliminarMateriaCursada($user, $codigo, $mesInicial, $mesFinal, $anio);
        return $confirmacion;
    }

}

?>
